import Model.LocalScore;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import static javax.swing.JOptionPane.showMessageDialog;


public class MainPanel extends JPanel implements Runnable {

    public static final int WIDTH = 200;
    public static final int HEIGHT = 110;
    public static final int SCALE = 2;

    // Steuerelemente:
    JButton btnHighscore = new JButton("Top 10", new ImageIcon("resources/image/weltkugel.png"));
    JButton btnStartGame = new JButton("Spiel starten");
    JLabel labelName = new JLabel("Bitte Spielernamen eingeben");
    JLabel labelLives = new JLabel("Bitte Anzahl Leben eingeben");
    JLabel labelSound = new JLabel("Sound");
    JLabel labelStartLevel = new JLabel("Start mit Level");
    JTextField txtName = new JTextField("Spielername");
    JTextField txtLives = new JTextField("3");
    JTextField txtStartLevel = new JTextField("1");
    JTextArea scores = new JTextArea();
    JLabel labelEmpty = new JLabel("");
    JLabel labelEmpty2 = new JLabel("");
    JLabel labelHighScore = new JLabel("Lokale Scores");
    JCheckBox chkSound = new JCheckBox("an/aus");
    public MainPanel() {
        super();

        setLayout(new GridLayout(7,2));
        this.add(labelName);
        this.add(txtName);
        this.add(labelLives);
        this.add(txtLives);
        this.add(labelStartLevel);
        this.add(txtStartLevel);
        this.add(labelSound);
        this.add(chkSound);
        this.add(labelEmpty);
        this.add(btnStartGame);

        this.add(labelHighScore);
        this.add(scores);
        this.add(labelEmpty2);
        this.add(btnHighscore);


        HighScore hs = new HighScore();
        LocalScore localScore = hs.getLocalScores();
        if (localScore.LastScore != null && localScore.BestScore != null){
            scores.setText("Letztes Ergebnis: " + localScore.LastScore + "\nBestes Ergebnis: " + localScore.BestScore);
        }else{
            scores.setText("Es sind keine Einträge vorhanden!");
        }
        scores.setEditable(false);

        // OnClickListener für Highscore-Button:
        btnHighscore.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                HighScore hs = new HighScore();

                JFrame window = new JFrame("Top 10");
                window.setContentPane(new HighScorePanel());
                window.pack();
                window.setVisible(true);
            }
        });

        // OnClickListener für Start-Button:
        btnStartGame.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                // Name aus Control holen:
                String name = txtName.getText();
                if (name.equals(null) || name.equals("") || name.equals("Spielername")){
                    showMessageDialog(null, "Bitte einen gültigen Spielernamen eingeben!");
                    return;
                }

                // gewünschte Anzahl Leben aus Control holen:
                String strLives = txtLives.getText();
                Integer iLives = 3;
                try {
                    iLives = Integer.parseInt(strLives);
                } catch (NumberFormatException numE) {
                    showMessageDialog(null, "Bei Anzahl Leben bitte eine ganze Zahl eingeben!");
                    return;
                }
                if (iLives < 1){
                    showMessageDialog(null, "Gewünschte Anzahl Leben muss größer als 0 sein!");
                    return;
                }

                // gewünschtes Level aus Control holen:
                String startLevel = txtStartLevel.getText();
                Integer iStartLevel = 1;
                try {
                    iStartLevel = Integer.parseInt(startLevel);
                } catch (NumberFormatException numE) {
                    showMessageDialog(null, "Bei gewünschtem Level bitte eine ganze Zahl eingeben!");
                    return;
                }
                if (iStartLevel < 1){
                    showMessageDialog(null, "Gewünschtes Level muss größer als 0 sein!");
                    return;
                }

                // Sound an oder aus?
                boolean bWithMusic = chkSound.isSelected();

                JFrame window = new JFrame("Frogger");
                window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                window.setContentPane(new GamePanel(iLives, bWithMusic, iStartLevel, name));
                window.pack();
                window.setVisible(true);
            }

        });

        setPreferredSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
        setFocusable(true);
        requestFocus();
    }

    public void run() {
        init();

    }


    public void init() {
    }

    private void update() {
    }

    private void render() {
    }

    private void draw() {
    }

}
